package client.coordinador;

import static client.common.angular.Angular.angular;
import static org.stjs.javascript.JSCollections.$array;

import org.stjs.javascript.Array;

import client.common.EndPoints.CoordinadorEP;
import client.common.Models.Estudiante;
import client.common.Models.Matricula;
import client.common.angular.EmptyPromise;
import client.common.angular.NgScope;
import client.common.directives.EPLoading;
import client.common.directives.EPModal;
import client.common.javascript.JsProcedure1;
import client.common.javascript.JsProcedure2;

public class AdminEstudianteScope extends NgScope {

	private Estudiante estudiante;
	protected String pane;
	private CoordinadorEP coorEP;
	private EPModal epModal;
	private EPLoading epLoading;

	public AdminEstudianteScope(final EPModal epModal,
			CoordinadorEP Coordinador, EPLoading epLoading) {
		super("AdminEstudianteScope");
		this.estudiante = new Estudiante();
		this.coorEP = Coordinador;
		this.epModal = epModal;
		this.epLoading = epLoading;

		final AdminEstudianteScope that = this;
		$on("$showEstudiante", new JsProcedure2<Object, Estudiante>() {
			public void $invoke(Object obj, Estudiante estu) {
				that.estudiante = estu;
				that.pane = "estudiante";
				epModal.open("estudiante");
			}
		});

		$on("$showMatricula", new JsProcedure2<Object, Estudiante>() {
			public void $invoke(Object e, Estudiante estu) {
				that.estudiante = estu;
				epModal.open("matricula");
			}
		});

	}

	public void matricular() {
		Matricula matricula = angular.copy(this.estudiante.matricula);
		matricula.idEstudiante = this.estudiante.id;
		final AdminEstudianteScope that = this;
		epLoading.$invoke(
				coorEP.newMatricula(matricula, new JsProcedure1<Matricula>() {
					public void $invoke(Matricula data) {
						that.epModal.close("matricula");
					}
				}), "#divMatricula");

	}

	public void actualizarPersona() {
		Estudiante estudiante = angular.copy(this.estudiante);

		final AdminEstudianteScope that = this;
		coorEP.updateEstudiante(this.estudiante.id, estudiante,
				new JsProcedure1<EmptyPromise>() {
					public void $invoke(EmptyPromise p) {
						that.epModal.close("estudiante");
					}
				});
	}

	public void imprimirBoletin(Estudiante e) {
		// coorEP.getBoletin(e.id);
	}

	public static Array<String> $inject() {
		return $array("epModal", "Coordinador", "epLoading");
	}

}
